package com.gxa.employment.common;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

/**
 * @Description: mybatis-plus的代码生成器
 * @Author:
 * @DateTime: 2025/2/15 8:50
 **/
public class CodeGenerator {
    //连接不同数据库或者数据表，需要修改的字段
    private static final String MYSQL_URL = "jdbc:mysql://120.26.231.147:3306/db_employment_system?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; //注意修改数据库名称
    private static final String ROOT = "root";
    private static final String PASSWORD = "355014436xX&.";
    private static final String[] TABLE_NAME = {"v_stu_resume"};  //可变参数

    public static void main(String[] args) {
        // 使用 FastAutoGenerator 快速配置代码生成器
        FastAutoGenerator.create(MYSQL_URL, ROOT, PASSWORD)  //连接自己的数据库
                /*全局设置*/
                .globalConfig(builder -> {
                    builder.author("author") // 设置作者
                           // .enableSwagger() // 开启 Swagger 模式
                            .dateType(DateType.ONLY_DATE) // 设置时间类型策略
                            .commentDate("yyyy-MM-dd") // 设置注释日期格式
                            .outputDir("src\\main\\java"); // 输出目录  第一个位置不能写\\ 不然就是绝对路径了
                })
                /*设置包，路径，没有就会默认创建*/
                .packageConfig(builder -> {
                    builder.parent("com.gxa.employment") // 设置父包名
                            .entity("entity.pojo") // 设置实体类包名
                            .mapper("mapper") // 设置 Mapper 接口包名
                            .service("service") // 设置 Service 接口包名
                            .serviceImpl("service.impl") // 设置 Service 实现类包名
                            //.xml("mappers") // 设置 Mapper XML 文件包名
                            .xml(null) // 不使用默认的 XML 包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/resources/mapper")) // 设置 Mapper XML 文件输出路径
                            .controller("controller"); // 设置 Controller 包名
                })
                /*.enableFileOverride() //覆盖已生成文件    不想覆盖哪个，就不添加，但是要添加，就要先构建*/
                .strategyConfig(builder -> {
                    builder.addInclude(TABLE_NAME) // 设置需要生成的表名
                            .addTablePrefix("sys_","tb_","v_")

                            .entityBuilder() //要先创建对象，才能进行其他设置
                            .enableTableFieldAnnotation() // 启用字段注解 （这类设置，只能在builder对象后，其他builder对象前   或者说可写范围）
                            .enableLombok() // 启用 Lombok
                            .enableFileOverride() //覆盖已生成文件

                            .mapperBuilder()
                            .enableFileOverride()//覆盖已生成文件

                            .serviceBuilder()
                            .enableFileOverride()//覆盖已生成文件
                            .formatServiceFileName("%sService") // 设置接口名不带I前缀
                            .formatServiceImplFileName("%sServiceImpl")

                            .controllerBuilder()
                            .enableHyphenStyle() //开启驼峰转连字符
                            .enableFileOverride() //覆盖已生成文件
                            .enableRestStyle(); // 开启生成@RestController 控制器
                })
                /*
                    使用自定义模版
                    模版的后缀名，代表使用的引擎不同
                    不同引擎需要导入不同依赖
                    .ftl---FreemarkerTemplateEngine
                    .vm---VelocityTemplateEngine
                    .btl---BeetlTemplateEngine
                    .ej---EnjoyTemplateEngine
                */
                /* 使用 Velocity 模板引擎*/
                .templateEngine(new VelocityTemplateEngine())
                .execute(); // 执行生成
    }
}
